iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 14
0
自我挑戰組

邁向 JavaScript 核心之路 系列 第 14

[Day 14] JavaScript 物件導向- 建立物件

  • 分享至 

  • xImage
  •  

今天我們要來講建立物件的方式,廢話不多說,就讓我們直接進入主題吧!

通常我們在 JavaScript 要建立一個物件並且增加屬性與方法的話,會像以下程式碼


    var obj = new Object();
    obj.name = "Reynold";
    obj.gender = "male";
    obj.showName = function() {
        console.log( "my name : " + this.name );
    };
    obj.showGender = function() {
        console.log( "my gender : " + this.gender );
    };
    obj.showName(); // my name : Reynold
    obj.showGender(); // my gender : male
    

但如果今天我們要大量地產生物件呢?可能有些同學會想到, copy and paste 就好啦,是沒錯, 畢竟一時剪貼一時爽,一直剪貼一直爽,別鬧了孩子,後面維護起來你會恨自己的,所以,我們可以利用函式來產生。


    function createPerson(name, gender) { //  建構物件的函式( 工廠方式 )
        // 原料
        var obj = new Object();
        // 加工
        obj.name = name;
        obj.gender = gender;
        obj.showName = function() {
            console.log( "my name : " + this.name );
        }
        obj.showGender = function() {
            console.log( "my gender : " + this.gender );
        }
        // 出廠
        return obj
    }
    
    var p1 = createPerson("Reynold", "male");
    p1.showName(); // my name : Reynold
    p1.showGender(); // my gender : male
    var p2 = createPerson("bonnie", "female");
    p2.showName(); // my name : bonnie
    p2.showGender(); // my gender : female
    

這樣我們就能快速地產生大量的物件,但就真的沒問題了嗎?
不,事情沒有我們想像的這麼簡單,孩子

這樣做會有兩大問題點

  1. 沒有使用 new

系統內建的物件習慣上都會使用 new 來產生物件

var date = new Date();
var ary = new Array();
  1. 方法構造重複
console.log(p1.showName === p2.showName); //false

從上方的程式碼我們可以得知,兩個的方法並不相同,這代表什麼?
代表說每次建立一個新的物件,就產生了一個新的方法,這容易造成記憶體資源上的浪費!

那我們到底該怎麼解決這些問題勒?預知後續如何,請待下回分曉


剛剛得知放颱風假,這讓連續兩天假日加班的我,差點哭出來 QQ

參考資料:

Tommy - 深入 JavaScript 核心課程
MDN - 初學者應知道的物件導向 JavaScript


上一篇
[Day 13] JavaScript 物件導向- This 與 內建物件
下一篇
[Day 15] JavaScript 物件導向- new 與 prototype
系列文
邁向 JavaScript 核心之路 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言